
// 抓数据用的模块 http、https，这两个都是内置模块（核心模块）


// 1. 加载 https 模块
var https = require('https');

// 加载 cheerio 模块
var cheerio = require('cheerio');
var fs = require('fs');
var path = require('path');


// 2. 构建 options （构建请求信息：请求报文）
var options = {
  hostname: 'www.qiushibaike.com',
  port: 443,
  path: '/',
  method: 'GET',
  headers: {
    'Connection': 'keep-alive',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36',
    'Upgrade-Insecure-Requests': '1',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    'Accept-Language': 'zh-CN,zh;q=0.8,en;q=0.6'
  }
};



// 3. 调用 https 的 request() 方法，向服务器发起请求，并且获取服务器返回的结果（页面代码）
// https.request(options[, callback])
var req = https.request(options, function (res) {
  // 通过监听 res 的 data 事件 和 end 事件获取服务器返回的数据

  var buffer = [];
  res.on('data', function (chunk) {
    // body...
    buffer.push(chunk);
  });

  res.on('end', function () {
    // body...
    buffer = Buffer.concat(buffer);
    var html = buffer.toString('utf8');


    // 1. 提取所有的作者名称（h2标签中的内容）
    // var result = html.match(/<h2>\s*.+\s*<\/h2>/ig);
    // console.log(result);


    // // 通过正则表达式的 exec 方法进行提取
    // // 1. 创建正则表达式对象
    // var regAuthor = /<h2>\s*(.+)\s*<\/h2>/ig;
    // // 2. 调用 正则表达式的 exec() 方法
    // // exec() 方法，调用一次，只能提取一个满足的匹配。通过反复调用多次，才可以将所有匹配的内容都提取出来
    // // 每次调用 exec 方法，如果找到了匹配的结果就返回结果，找不到就返回 null

    // var result;

    // while ( result = regAuthor.exec(html) ) {
    //   console.log(result[0] + '----' + result[1]);
    // }



    // 提取段子正文
    var regContent = /<div class="content">\s*<span>\s*(.+\s*.+)\s*<\/span>(\s*<span class="contentForAll">查看全文<\/span>)?\s*<\/div>/ig;

    while ( result = regContent.exec(html) ) {
      console.log(result[1]);
    }

    

    // var jokes = [];


    // // 把 jokes 写入到文件
    // fs.writeFile(path.join(__dirname, 'jokes.json'), JSON.stringify(jokes), function (err) {
    //   if (err) {
    //     throw err;
    //   }
    //   console.log('ok');
    // });
  });
});


// 监听本次请求是否出错
req.on('error', function (err) {
  console.log('出错了：' + err);
});


// 如果是 post 请求要设置请求报文体
// req.write(postData);



// 结束本次请求
// 表示客户端向服务器发送的数据都发完了
req.end();

